#include "Log.h"

bool Log::banderaInstancia = false;

Log* Log::log = NULL;

Log::Log() {
	Configuracion* config = Configuracion::getInstancia();
	this->pathLog = config->getNombreArchivoLog();
}

Log* Log::getInstancia()
{
    if(! banderaInstancia)
    {
        log = new Log();
        banderaInstancia = true;
        return log;
    }
    else
    {
        return log;
    }
}

void Log::abrirArchivoLog() {

	string fileName = this->pathLog;
	this->archivoLog.open(fileName.c_str(), ios::out | ios::app);
	if (this->archivoLog.bad()) {
		this->archivoLog.open(fileName.c_str(), ios::out);
	}
}

void Log::CerrarArchivoLog(){
	this->archivoLog.close();
}

//devuelve la fecha en formato log
string Log::getFechaActual() {
	time_t fecha;
	struct tm * fechaYHora;
	time(&fecha);
	fechaYHora = localtime(&fecha);

	return asctime(fechaYHora);
}

void Log::escribir(string escribirLog){
	this->abrirArchivoLog();
	string fechaYHoraActual = this->getFechaActual();
	fechaYHoraActual.erase(std::remove(fechaYHoraActual.begin(), fechaYHoraActual.end(), '\n'), fechaYHoraActual.end());
	this->archivoLog << fechaYHoraActual+": "+escribirLog+"\n";
	this->CerrarArchivoLog();
}

Log::~Log() {}
